/**
 * 列表控制器
 */
(function (app, ng) {
    'use strict';

    /**
     * 注册控制器
     */
    app.controller('template.edit.ctrl', Controller);

    /**
     * 依赖项
     */
    Controller.$inject = ['$scope', '$controller', 'module', 'template.service'] // iResource依赖项
        .concat([ '$stateParams', '$uibModal', 'dialogs']); // 常用

    /**
     * 声明控制器
     * @param $scope 当前作用域
     * @param $controller 控制器服务
     * @param module 当前模块
     * @param Service 当前服务
     * @param $stateParams 路由参数
     * @param $uibModal 模态框服务
     * @param dialogs 提示框服务
     * @constructor
     */
    function Controller($scope, $controller, module, Service, $stateParams, $uibModal, dialogs) {
        // 初始化
        var vm = this;
        extendResourceController();
        var iResource = vm.iResource;

        // 属性声明
        vm.query = {'attribute1': null};
        vm.table = {}; // 表格
        vm.tableOptions = Service.tableOptions(tableParam()); // 表格设置

        // 方法引用
        ng.extend(vm, {
            add: add, // 新增
            remove: remove, // 删除
            reset: reset, // 重置
            search: search // 搜索
        });

        // 方法声明

        /**
         * 继承Restful控制器
         */
        function extendResourceController() {
            var controller = $controller('iResourceController', {$scope: $scope, module: module, iResource: Service});
            ng.extend(vm, controller);
        }

        function add() {
            var dialog = editDialog();
            dialog.result.then(function (data) {
                vm.table.flexReload();
            });
        }

        /**
         * 编辑模态框
         * @param params
         * @returns dialog demo/templates/template-edit.html
         */
        function editDialog(params) {
            var resolve = {module: module, data: params || {}};
            var dialog = $uibModal.open({
                size: 'lg',
                templateUrl: 'demo/templates/template-edit.html',
                controller: 'template.edit.ctrl',
                controllerAs: 'vm',
                resolve: resolve
            });
            return dialog;
        }

        // 删除
        function remove(index) {
            var data = vm.table.getRawRecords(index);
            // 弹出确认删除提示信息
            var dlg = dialogs.confirm(getMessage("common.deleteConfirm"));
            dlg.result.then(function (param) {
                iResource.remove({id: data.id}).then(function (data) {
                    // dialogs.notify(data); // 自动弹出提示框
                    vm.table.flexReload(); // 刷新列表
                });
            });
        }

        // 重置
        function reset() {
            vm.query = angular.copy(vm.query);
            search();
        }

        // 搜索
        function search() {
            var param = tableParam();
            vm.table.flexOptions({
                newp: 1,
                extParam: param
            }).flexReload();
        }

        /**
         * 创建表格参数
         */
        function tableParam() {
            // 搜索参数
            var param = angular.extend({}, $stateParams, vm.query);
            if (vm.query.dateStart > vm.query.dateEnd) {
                dialogs.notify(getMessage("error.timeRangeError"));
                return;
            }
            param[param.searchType] = param.keyword;
            delete param.searchType;
            delete param.keyword;
            return param;
        }

    }
})(iApp.module(), window.angular);